// 2014-02-01 Tyrghen
//---------------------------------------------
// Usage:
//  [] call edt_fnc_relocate;
//---------------------------------------------
// Purpose:
// Moves the object to one of the given markers. The markers can have a marker text a precise ATL position (to position inside buildings).
// The position will then be chosen randomly.
// 
// Parameters:
// - The object to move
// - A list of all markers which can be candidates
//
// Returns:
// The position of the object after it was moved
//---------------------------------------------
// Objectif:
// Déplace un objet sur l'un des marqueurs donnés. Les marqueurs peuvent avoir un texte qui est une position ATL (au dessus du terrain) précise.
// Ca permet notamment de placer un objet de manière précise à l'intérieur d'un bâtiment.
// La position sera choisie aléatoirement.
//
// Paramètres:
// - L'objet à déplacer
// - Une liste de marqueurs qui peuvent être utilisés
//
// Renvoie:
// La position de l'objet après qu'il soit déplacé
//---------------------------------------------

//#define __FORCE_TRACE__
//#define __FORCE_DEBUG__
//#define __FORCE_INFO__
#define THIS_FILE "editor\fn_relocate.sqf"
#include <tmf_constants.h>
#include <tmf_macros.h>

TRACE_1("Start",_this);
TMFPROFILERSTART;

private ["_object","_marker_list","_marker","_marker_text","_marker_pos","_position"];
DEFAULT_PARAM(_object,0,objNull);
DEFAULT_PARAM(_marker_list,1,[]);

_position = [0,0,0];
if (IS_OBJECT(_object) && {!isNull _object}) then {
	if (IS_ARRAY(_marker_list) && {count _marker_list > 0}) then {
		_marker = _marker_list select (floor(random(count _marker_list)));
		if (IS_MARKER(_marker)) then {
			_marker_text = markerText _marker;
			if (_marker_text != "") then {
				_marker_pos = (markerPos _marker);
				call compile format["_marker_pos = %1;",_marker_text];
				if (!IS_ARRAY(_marker_pos) || {count _marker_pos != 3}) then { _marker_pos = (markerPos _marker); };
				_object setPosATL _marker_pos;
				_object setDir (markerDir _marker);
			} else {
				_object setPos (markerPos _marker);
				_object setDir (markerDir _marker);
			};
			_position = getPos _object;
		} else {
			TRACE_1("Invalid Marker",_marker);
		};
	} else {
		TRACE_1("Invalid Marker List",_marker_list);
	};
} else {
	TRACE_1("Invalid Object",_object);
};

TRACE_1("End",_position);
TMFPROFILERSTOP;
_position